package cn.wy.day02;

import java.util.Scanner;

/*
* 题目：无重复字符的最长字串
* 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
* 示例 1:
* 输入: "abcabcbb"
* 输出: 3
* 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
* 示例 2:
* 输入: "bbbbb"
* 输出: 1
* 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
* 示例 3:
* 输入: "pwwkew"
* 输出: 3
* 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
* 请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
*
*  Related Topics 哈希表 双指针 字符串 Sliding Window
 * */
public class Soultion3 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        //1.接受用户的字符串
        String str = sc.nextLine();
        //2.判断不含重复字符的最长字串的长度
        int length = method(str);
        System.out.println(length);
    }

    /*
    * 循环逐个比较
    * */
    public static int method(String str){
        int length = 1;//存储最长的不重复字符的最长字串长度
        int num = 1; //记录当前不重复字符的最长字串长度
        int start = 0; //标记当前字符的起始位置
        for (int i = 1; i < str.length(); i++) {
            if (str.substring(start, i).indexOf(str.charAt(i)) != -1){
                //字符相等，则重新计算
                if(length<num){//刷新之前，先比较一下当前记录不重复字符长度和旧的最大长度
                    length = num;
                }
                num = 1;//刷新当前记录的不重复的字符串的长度
                start = i; //更改字串起始位置
            }else {
                //字符不等继续加1,并更新长度
                num++;
            }
        }

        if(length<num){ //出循环之后，再次比较一下当前记录字符长度和旧的最大长度
            length = num;
        }
        return length;
    }
}
